package com.literaryfamily.literaryfamily.service.book.msg;

import com.literaryfamily.literaryfamily.entity.Audit;
import com.literaryfamily.literaryfamily.entity.Book;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 书籍信息操作接口
 * 所有涉及读写的方法都需要抛出 WriteError 数据库读写错误异常(这个是运行时异常,只需要抛出不需要处理)
 * 此接口所有方法均不检查用户身份,应该验证身份后在进行检查
 *
 * @author 滑稽/因果报应
 */
public interface BookMsgService {
	/**
	 * 录入书籍信息
	 * 书籍编号生成规则: book_id_yyyy_MM_dd_hh_mm_ss_userId
	 *
	 * @param book 完整的书籍信息
	 * @return 包含ID的书籍信息,并记录审核信息
	 */
	Book addBook(Book book);

	/**
	 * 更新书籍信息
	 *
	 * @param newBookMsg 完整的新书籍信息
	 * @return 新的信息
	 */
	Book updateBook(Book newBookMsg);

	/**
	 * 删除书籍信息
	 *
	 * @param book 被删除的书籍
	 * @param userId 操作用户
	 * @return 审核信息
	 */
	Audit dleBook(Book book,Long userId);


	/**
	 * 更新书籍图片信息,推荐做法:直接覆盖并删除原有图片后重新上传和覆盖字段
	 * 请注意如果上传的图片名称和原有的相同时视为覆盖
	 *
	 * @param BookId 更新的书籍ID
	 * @param img    上传的图片包
	 * @return 操作结果
	 */
	Book upBookImg(Long BookId, List<MultipartFile> img);

	/**
	 * 删除某张图片
	 *
	 * @param BookId 需要删除图片的书籍
	 * @param name   删除图片的名称
	 * @param index  图片在书籍图片中的位置,如果和上面选择的不符时以此参数为准,与前面的至少一个不为空
	 * @return 操作结果
	 */
	Book updateBookImage(Long BookId, String name, Integer index);

}